'use strict';

exports.main = async (event, context) => {
	try {
		const db = uniCloud.database();
		const collection = db.collection('data');
		
		// 获取要更新的数据ID和新数据
		const { id, updateData } = event;
		
		if (!id) {
			return {
				code: -1,
				message: '缺少数据ID参数'
			};
		}
		
		if (!updateData || Object.keys(updateData).length === 0) {
			return {
				code: -1,
				message: '缺少更新数据'
			};
		}
		
		// 构建更新数据对象，过滤掉不允许更新的字段
		const allowedFields = ['temperature', 'humidity', 'uv', 'ph', 'soil', 'rain', 'light', 'led', 'fan', 'water', 'node_id'];
		const filteredUpdateData = {};
		
		allowedFields.forEach(field => {
			if (updateData.hasOwnProperty(field)) {
				if (['led', 'fan', 'water'].includes(field)) {
					filteredUpdateData[field] = Boolean(updateData[field]);
				} else if (field === 'node_id') {
					filteredUpdateData[field] = parseInt(updateData[field]) || 0;
				} else {
					filteredUpdateData[field] = parseFloat(updateData[field]) || 0;
				}
			}
		});
		
		// 添加更新时间
		filteredUpdateData.updateTime = new Date();
		
		// 执行更新操作
		const result = await collection.doc(id).update(filteredUpdateData);
		
		if (result.updated === 0) {
			return {
				code: -1,
				message: '未找到要更新的数据或数据未发生变化'
			};
		}
		
		return {
			code: 0,
			message: '数据更新成功',
			data: {
				updated: result.updated,
				updatedData: filteredUpdateData
			}
		};
		
	} catch (error) {
		console.error('更新数据失败:', error);
		return {
			code: -1,
			message: '数据更新失败',
			error: error.message
		};
	}
};